package baidu

import "vrcm/src/vrcm/common/dto"

type AuditReq struct {
	TenantId       string         `json:"tenant_id"`
	AppId          int64          `json:"appId" comment:"应用ID"`
	StreamUrl      string         `json:"streamUrl" comment:"流地址，支持hls、rtmp、rtsp协议"`
	StrategyId     int64          `json:"strategyId" comment:"策略ID"`
	StreamType     string         `json:"streamType" comment:"流地址协议类型，例如：hls、rtmp、rtsp等"`
	ExtId          string         `json:"extId" comment:"用户侧流唯一标识，长度限制45字符以内"`
	StartTime      int64          `json:"startTime" comment:"直播开始时间戳，当前时间之后，单位ms"`
	EndTime        int64          `json:"endTime" comment:"直播结束时间戳，startTime之后，单位ms"`
	StreamName     string         `json:"streamName" comment:"直播名称，长度限制20字符以内"`
	StreamDealInfo StreamDealInfo `json:"streamDealInfo" comment:"音视频流处理方案"`
	SubEvents      SubEvents      `json:"subEvents" comment:"音频流、视频流订阅事件"`
	NoticeUrl      string         `json:"noticeUrl" comment:"通知地址 ，接口定义见通知接口"`
	Region         string         `json:"region" comment:"hd/hn/hb"`
	DetectType     int            `json:"detectType" comment:"审核类型"`
}

type AuditReq1 struct {
	TenantId          string `json:"tenant_id"`
	Source            string `json:"source"`
	Notification      string `json:"notification"`
	Preset            string `json:"preset"`
	Description       string `json:"description"`
	NotifyLevel       string `json:"notifyLevel"`
	ThumbnailInterval int    `json:"thumbnailInterval"`
	AudioInterval     int    `json:"audioInterval"`
}

type StreamDealInfo struct {
	VideoFrequency int `json:"videoFrequency" comment:"视频流处理抽帧频率，单位s，默认5s抽一帧图"`
	AudioCutModel  int `json:"audioCutModel" comment:"音频流切分方式 ，VAD模式为0，固定时长切分为1，默认VAD切分音频流片段"`
	AudioCutLength int `json:"audioCutLength" comment:"音频流切分方式为固定时长时，切分音频的最长时长，单位s。该参数最长支持设置为60s，默认值为60s"`
}

type SubEvents struct {
	VideoSubEvents string `json:"videoSubEvents" comment:"视频流接收通知的订阅事件，参数是订阅事件的code，之间用英文逗号分隔，默认是2。例如 1,2,3,4"`
	AudioSubEvents string `json:"audioSubEvents" comment:"音频流接收通知的订阅事件，参数是订阅事件的code，之间用英文逗号分隔，默认是2。例如 1,2,3,4"`
}

type AuditRes struct {
	LogId int64  `json:"logId"`
	Msg   string `json:"msg"`
	Ret   string `json:"ret"`
	Data  Data   `json:"data"`
}
type Data struct {
	TaskId string `json:"taskId"`
}

type StopAuditReq struct {
	TenantId string `json:"tenant_id"`
	AppId    int64  `json:"appId" comment:"应用ID"`
	TaskId   string `json:"taskId"`
	//Source       string `json:"source"`
	//Notification string `json:"notification"`
}

type LongVideoAuditReq struct {
	TenantId   string `json:"tenant_id"`
	AppId      int64  `json:"appId" comment:"应用ID"`
	Url        string `json:"url" comment:"视频地址"`
	StrategyId int64  `json:"strategyId" comment:"策略ID"`
	Frequency  int    `json:"frequency" comment:"视频流处理抽帧频率，单位s，默认5s抽一帧图"`
	ExtId      string `json:"extId" comment:"用户侧流唯一标识，长度限制45字符以内"`
	SubEvents  string `json:"subEvents" comment:"1是合规、2是违规、3是疑似、4是审核失败】，之间用英文逗号分隔，默认是2,3【代表通知推送审核结论是违规和疑似的数据"`
	NoticeUrl  string `json:"noticeUrl" comment:"通知地址 ，接口定义见通知接口"`
	DetectType int    `json:"detectType" comment:"审核类型 0视频、音频同时过审，1仅视频过审，2仅音频过审"`
}

type LongVideoData struct {
	AppId        string `json:"appId"`
	ExtId        string `json:"extId"`
	ExtraInfo    string `json:"extraInfo"`
	Result       Result `json:"result"`
	TaskDuration int    `json:"taskDuration"`
	TaskId       int64  `json:"taskId"`
}

type Result struct {
	Audios         []interface{} `json:"audios"`
	Conclusion     string        `json:"conclusion"`
	ConclusionType int           `json:"conclusionType"`
	ErrorCode      int           `json:"errorCode"`
	Frames         []Frame       `json:"frames"`
}

type ConclusionTypeGroupInfo struct {
	Msg             string        `json:"msg"`
	SubTypeInfoList []SubTypeInfo `json:"subTypeInfoList"`
	Type            string        `json:"type"`
	TypeInfo        TypeInfo      `json:"typeInfo"`
}

type SubTypeInfo struct {
	SubType   string `json:"subType"`
	Timestamp int    `json:"timestamp,omitempty"`
	StartTime int    `json:"startTime,omitempty"`
	EndTime   int    `json:"endTime,omitempty"`
}

type TypeInfo struct {
	Type string `json:"type"`
}
type Frame struct {
	Conclusion        string      `json:"conclusion"`
	ConclusionType    int         `json:"conclusionType"`
	Data              []FrameData `json:"data"`
	FrameThumbnailUrl string      `json:"frameThumbnailUrl"`
	FrameTimeStamp    int         `json:"frameTimeStamp"`
	FrameUrl          string      `json:"frameUrl"`
}

type FrameData struct {
	Msg            string  `json:"msg"`
	Conclusion     string  `json:"conclusion"`
	SubType        int     `json:"subType"`
	ConclusionType int     `json:"conclusionType"`
	Stars          []Stars `json:"stars"`
	Type           int     `json:"type"`
}

type Stars struct {
	Probability float64 `json:"probability"`
	Name        string  `json:"name"`
}

type GetAuditResultByAssetReq struct {
	TenantId string `json:"tenant_id"`
	AssetId  string `json:"asset_id" comment:"素材id"`
}

type GetAuditResultDetailByTypeReq struct {
	dto.Pagination `search:"-"`
	TenantId       string `json:"tenant_id"`
	AssetId        string `json:"asset_id" comment:"素材id"`
	ViolationType  []int  `json:"violation_type" comment:"违规类型 1色情识别、2暴力、3恶心、4广告、5政治敏感 6其他"`
}
